/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import gui.graphicals.ToolBar;
import java.awt.BorderLayout;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

/**
 * Classe représentant l'IHM d'un module
 * @author thomas
 */
public abstract class AbstractModule extends JPanel {
    
    /**
	 * 
	 */
    private static final long serialVersionUID = 7919726843393846080L;
    private MainWindow _mainWindow;
    
    /**
     * Constructeur
     * @param mainWindow Fenêtre principale
     */
    protected AbstractModule(MainWindow mainWindow) {
        this._mainWindow = mainWindow;
        
        initController();
        initView();
        
        build();
    }
    
    /**
     * Build actual module (toolbar and event)
     * 
     */
    private void build() {
        
        setLayout(new BorderLayout(5, 5));
        
        add(getToolBar(), BorderLayout.NORTH);
        add(getLateralToolBar(), BorderLayout.WEST);
        add(getMainFrame(), BorderLayout.CENTER);
        
        
    }
    
    protected MainWindow getMainWindow() {
        return this._mainWindow;
    }
    
    /**
     * Method to build a module toolbar
     * @return Return a complete toolbar
     */
    protected abstract ToolBar getToolBar();
    
    /**
     * Method to build a module content
     * @return Return a complete JComponent
     */
    protected abstract JComponent getMainFrame();
	
    /**
     * Method to build the lateral toolbar
     * @return Return the left toolbar
     */
    protected ToolBar getLateralToolBar() {
        ToolBar tb = new ToolBar(SwingConstants.VERTICAL);
		
        tb.makeButton("browser.png",
                "BROWSER",
                "Accéder au navigateur",
                "BROWSER",
                this._mainWindow);

        tb.addSeparator();

        tb.makeButton("music.png", 
                "MULTIMEDIA", 
                "Accéder au lecteur multimédia", 
                "MULTIMEDIA",
                this._mainWindow);

        tb.addSeparator();

        tb.makeButton("folder.png", 
                "FOLDER", 
                "Accéder à l'explorateur de fichier", 
                "FOLDER",
                this._mainWindow);

        tb.addSeparator();

        tb.makeButton("rss.png", 
                "RSS", 
                "Accéder à la lecteur de flux RSS", 
                "RSS",
                this._mainWindow);

        return tb;
    }

    
    /**
     * This method permit to create a controller before view building
     */
    protected void initController() {
    }
    
    /**
     * This metohd permit to create object of view before everything is building
     */
    protected void initView() {
    }
    
    
    /**
     * @param title     Title of messagebox
     * @param message   Message
     */
    public void showErrorBox(String message, String title) {
        JOptionPane.showMessageDialog(this, 
                "Une erreur a été rencontrée :\n\n" + message, 
                title, JOptionPane.ERROR_MESSAGE);
    }
    
    /**
     * 
     * @param title     Title of messagebox
     * @param message   Message
     */
    public void showDevErrorBox(Exception ex) {
        
        ex.printStackTrace(System.err);
        
        JOptionPane.showMessageDialog(this, 
                "Une erreur a été rencontrée :\n\n" + ex.getMessage() + "\n\n" + ex.getLocalizedMessage() + "\n\n" + ex.toString() + "\n\n"
                + "Pensez à remplacer ce message une fois le problème résolu.", 
                ex.getLocalizedMessage(), JOptionPane.WARNING_MESSAGE);
        
        ex.printStackTrace();
    }
    
    /**
     * Error message: wrong url/unknown url
     * @param wrongUrl
     */
    public void showMalformedURLException(String wrongUrl) {
        showErrorBox("Nous ne connaissons pas cette URL,\n"
                + "ou alors celle-ci est mal formée.\n\n"
                + "Voilà ce que vous avez demandé : \n" + wrongUrl,
                "URL inconnue ou mal formée");
    }
    
    public void showFileNotFoundException(String wrongPath) {
        showErrorBox("Le dossier défini dans les préférences n'a pas été trouvé.\n\n"
                + "Il s'agit de :\n" + wrongPath + "\n\n"
                + "Ce paramètre est à enregistrer dans la classe ClInit.", 
                "Le répertoire musical est introuvable");
    }
}
